<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // const fn = (function(){
  //   // 构造函数部分
  //   function fn(n){
  //     this.name = n;
  //   }
  //   // 原型部分
  //   fn.prototype.show = function(){
  //     console.log(this.name);
  //   }
  //   return fn;
  // })();
  // const o1 = new fn("admin");
  // console.log(o1);
  // o1.show();
  
  // ---------

  // ES6新增的class的使用

  // class fun{
  //   // 构造函数部分
  //   constructor(n){
  //     this.name = n
  //   }
  //   // 原型部分
  //   show(){
  //     console.log(this.name);
  //   }
  // }
  // const o2 = new fun("root")
  // console.log(o2)
  // o2.show()

  // ----------

  // 类：是实例的抽象化
  // 实例：是类的具象化

  // const obj1 = {
  //   name:"Admin"
  // }
  // const obj2 = {
  //   name:"root"
  // }
  // const obj3 = {
  //   name:"张三"
  // }

  // function fn(n){
  //   const obj = {};
  //   obj.name = n;
  //   return obj;
  // }

  // const o1 = fn("admin");
  // const o2 = fn("root");
  // const o3 = fn("zhangsan");

  // 类（class），一般习惯用于描述构造函数部分，用来提供属性的规范
  // 接口（interface），一般习惯用语描述原型部分，用来提供方法的规范

  // 接口约束了类的功能
  // 类约束了实例的属性

  
  // 两个类继承之后
  // 子类，父类
  // 子类是父类的子类
  // 父类是子类的超类

  // ===========

  // 构造函数（类）的命名规范：大驼峰

  // function Fn(n){
  //   this.msg = n;
  // }

  // const f = Fn("admin");
  // console.log(f);
  // console.log(msg);

  // const f1 = new Fn("admin");
  // console.log(f1);

  // ============

</script>
</html>